﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Twitterizer;

/// <summary>
/// Esta clase es un adaptador de la API de twitter para el uso que se le da en el sistema
/// </summary>
public class TwitterAPI
{
    private string twitterConsumerKey = "g8CDwp19i1UbyIvVk7hGw";
    private string twitterConsumerSecret = "yX3vPBKQRhj7y1jDmeasa25NpW2YGCwt1rYfsLytTM";
    private string twitterCallbackAddress = "http://127.0.0.1:1222/trunk/Pages/twitterLogin.aspx";
    static public string TIPO_USUARIO_TWITTER = "Usuario de Twitter";
	public TwitterAPI()
	{
		
	}

    public OAuthTokenResponse ObtenerRequestToken()
    {
       return OAuthUtility.GetRequestToken(twitterConsumerKey, twitterConsumerSecret, twitterCallbackAddress);
    }

    public OAuthTokenResponse obtenerTokensDuranteCallback()
    {
       return OAuthUtility.GetAccessTokenDuringCallback(twitterConsumerKey, twitterConsumerSecret);
    }
    /// <summary>
    /// Obtiene la información del usuario de Twitter.
    /// Lanza una <code>TipoDeUsuarioNoTwitterException</code> si el usuario no es usuario de twitter
    /// </summary>
    /// <param name="usuario">Un usuario de twitter</param>
    /// <returns>Información del usuario de twitter</returns>
    public TwitterUser ObtenerUsuarioTwitter(Usuario usuario)
    {
        validarTipoUsuario(usuario);
        OAuthTokens oAuthTokens = new OAuthTokens();
        oAuthTokens.AccessToken = usuario.Id_twitter;
        oAuthTokens.AccessTokenSecret = usuario.Id_twitter_secret;
        oAuthTokens.ConsumerKey = twitterConsumerKey;
        oAuthTokens.ConsumerSecret = twitterConsumerSecret;
        TwitterResponse<TwitterUser> userResponse = Twitterizer.TwitterUser.Show(oAuthTokens, usuario.TwitterIdentification);
        if (!(userResponse.Result == RequestResult.Success))
        {
            throw new TwitterComunicationException("fallo la comunicación con el api de twitter. Mensaje de error: " + userResponse.ErrorMessage );
        }
        else
        {
            return userResponse.ResponseObject;
        }

    }
    /// <summary>
    /// Valida que el usuario pasado sea un usuario de twitter.
    /// Lanza una <code>TipoDeUsuarioNoTwitterException</code> si el usuario no es usuario de twitter
    /// </summary>
    /// <param name="usuario"></param>
    private static void validarTipoUsuario(Usuario usuario)
    {
        TipoUsuarioServices tuServices = new TipoUsuarioServices();
        TipoUsuario tipo = tuServices.buscarTipoUsuarioPorDescripcion(TIPO_USUARIO_TWITTER);
        if (tipo.Id != usuario.Tipo_usuario_id)
        {
            throw new TipoDeUsuarioNoTwitterException("El usuario no es usuario de twittter");
        }
    }
    /// <summary>
    /// Actualiza el estado de twitter del usuario pasado como parametro
    /// Lanza una <code>TipoDeUsuarioNoTwitterException</code> si el usuario no es usuario de twitter
    /// </summary>
    /// <param name="usuarioTwitter"></param>
    /// <param name="mensaje"></param>
    public void actualizarEstado(Usuario usuarioTwitter, string mensaje)
    {
        validarTipoUsuario(usuarioTwitter);
        OAuthTokens oAuthTokens = new OAuthTokens();
        oAuthTokens.AccessToken = usuarioTwitter.Id_twitter;
        oAuthTokens.AccessTokenSecret = usuarioTwitter.Id_twitter_secret;
        oAuthTokens.ConsumerKey = twitterConsumerKey;
        oAuthTokens.ConsumerSecret = twitterConsumerSecret;
        Twitterizer.TwitterStatus.Update(oAuthTokens, mensaje);
    }
}